Text Preprocessing হল Natural Language Processing (NLP)-এ ডেটা প্রস্তুত করার একটি গুরুত্বপূর্ণ প্রক্রিয়া। Tokenization, Padding, এবং Embedding হল টেক্সট ডেটার প্রিপ্রসেসিং-এর মূল পদক্ষেপ যা মডেল ট্রেনিং এর জন্য টেক্সট ডেটাকে উপযুক্ত এবং কার্যকরী করে তোলে। নিচে প্রতিটি পদক্ষেপ বিস্তারিতভাবে আলোচনা করা হয়েছে:
1. Tokenization
Tokenization হল টেক্সটকে ছোট ছোট ইউনিটে (যেমন শব্দ, চরিত্র বা সেন্টেন্স) বিভক্ত করার প্রক্রিয়া। এটি NLP এর প্রথম এবং মৌলিক পদক্ষেপ, যেখানে একটি বাক্য বা ডকুমেন্টকে টোকেন (পদ বা চরিত্র) হিসেবে বিভক্ত করা হয়।
Tokenization এর ধরন:
- Word Tokenization: এটি একটি বাক্য বা প্যারাগ্রাফকে শব্দ হিসেবে বিভক্ত করে।
- Character Tokenization: এটি টেক্সটকে একেকটি চরিত্র হিসেবে বিভক্ত করে।
- Sentence Tokenization: এটি একটি প্যারাগ্রাফকে একাধিক বাক্যে বিভক্ত করে।
Tokenization উদাহরণ (Python)
from nltk.tokenize import word_tokenize
text = "Hello, how are you doing today?"
tokens = word_tokenize(text)
print("Tokens:", tokens)
আউটপুট:
Tokens: ['Hello', ',', 'how', 'are', 'you', 'doing', 'today', '?']
2. Padding
Padding হল টেক্সট ডেটার দৈর্ঘ্য সমান করতে একটি সাধারণ পদ্ধতি, যাতে ইনপুট সিকোয়েন্সের দৈর্ঘ্য মডেল প্রক্রিয়া করার জন্য উপযুক্ত হয়। বিশেষ করে, Recurrent Neural Networks (RNNs), LSTMs, GRUs বা CNNs-এ ইনপুট সিকোয়েন্সের দৈর্ঘ্য সমান থাকা জরুরি।
- Padding এর মাধ্যমে ছোট সিকোয়েন্সগুলিকে বড় সিকোয়েন্সের সাথে মানানসই করা হয়। উদাহরণস্বরূপ, যদি আপনার ইনপুট সিকোয়েন্সের দৈর্ঘ্য 5 হয় এবং আপনি 10 আকারের সিকোয়েন্স চান, তাহলে আপনি 0 (প্যাডিং ভ্যালু) দিয়ে বাকি অংশ পূর্ণ করবেন।
Padding উদাহরণ (Keras)
Keras লাইব্রেরিতে pad_sequences ব্যবহার করে সহজেই padding করা যেতে পারে:
from keras.preprocessing.sequence import pad_sequences
# ইনপুট সিকোয়েন্স
sequences = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
padded_sequences = pad_sequences(sequences, padding='post')
print("Padded Sequences:")
print(padded_sequences)
আউটপুট:
Padded Sequences:
[[1 2 3 0 0]
[4 5 0 0 0]
[6 7 8 9 0]]
- padding='post': প্যাডিং শেষে যোগ হবে (যেমন, প্রতি সিকোয়েন্সের শেষে 0 যোগ করা হবে)।
- padding='pre': প্যাডিং শুরুতে যোগ হবে (যেমন, প্রতি সিকোয়েন্সের শুরুতে 0 যোগ করা হবে)।
3. Embedding
Embedding হল টেক্সট ডেটাকে vector representation বা dense vector আকারে রূপান্তর করার প্রক্রিয়া। শব্দগুলিকে সংখ্যাগত ফর্মে রূপান্তর করা হয়, যাতে মডেল তাদের প্রক্রিয়া করতে পারে।
- Word Embedding: এটি প্রতিটি শব্দের জন্য একটি বাস্তব সংখ্যার ভেক্টর তৈরি করে, যা টেক্সটের মানে এবং প্রসঙ্গের ভিত্তিতে প্রশিক্ষিত হয়।
- Pre-trained Embeddings: বিভিন্ন বড় ডেটাসেট ব্যবহার করে Word2Vec, GloVe, FastText প্রাক-প্রশিক্ষিত এম্বেডিং তৈরি করা হয় যা শব্দের মধ্যে সম্পর্ক বুঝতে সাহায্য করে।
Word Embedding উদাহরণ (Keras)
Keras এ Embedding layer ব্যবহার করা হয় যা শব্দ ইনডেক্সকে ভেক্টর স্পেসে রূপান্তরিত করে।
from keras.models import Sequential
from keras.layers import Embedding
# ইনপুট সিকোয়েন্সে শব্দের সংখ্যা এবং এম্বেডিং আকার
vocab_size = 10
embedding_dim = 8
# মডেল তৈরি করা
model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=embedding_dim, input_length=5))
# মডেল সারাংশ দেখানো
model.summary()
এখানে:
- input_dim=vocab_size: ভোকাবুলারির আকার (কতগুলো ইউনিক শব্দ আছে)।
- output_dim=embedding_dim: এম্বেডিং ভেক্টরের আকার (যত বেশি এই সংখ্যা, তত বেশি শব্দের বৈশিষ্ট্য মডেল ক্যাপচার করতে পারবে)।
- input_length: ইনপুট সিকোয়েন্সের দৈর্ঘ্য।
Pre-trained Embedding Example (GloVe)
GloVe (Global Vectors for Word Representation) হল একটি প্রাক-প্রশিক্ষিত এম্বেডিং মডেল যা টেক্সটের শব্দগুলোকে ভেক্টর ফরম্যাটে রূপান্তর করে।
import numpy as np
# GloVe বা অন্য pre-trained embedding থেকে শব্দের ভেক্টর লোড করা
embedding_index = {}
with open('glove.6B.100d.txt', 'r', encoding='utf-8') as f:
for line in f:
values = line.split()
word = values[0]
vector = np.asarray(values[1:], dtype='float32')
embedding_index[word] = vector
# শব্দটির ভেক্টর প্রিন্ট করা
print(embedding_index['hello'])
এখানে, glove.6B.100d.txt হল প্রাক-প্রশিক্ষিত GloVe এম্বেডিং ফাইল।
4. Full Text Preprocessing Pipeline
এখানে একটি পূর্ণাঙ্গ টেক্সট প্রিপ্রসেসিং পাইপলাইন দেওয়া হল যা Tokenization, Padding, এবং Embedding সহ সমস্ত পদক্ষেপ সম্পন্ন করবে।
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.layers import Embedding
import numpy as np
# 1. Tokenization
texts = ["I love machine learning", "Deep learning is great", "Text preprocessing is essential"]
tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
# 2. Padding
padded_sequences = pad_sequences(sequences, padding='post')
# 3. Word Embedding
embedding_dim = 8
embedding_layer = Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=embedding_dim, input_length=5)
# Apply the embedding layer
embedded_sequences = embedding_layer(padded_sequences)
print("Padded Sequences:", padded_sequences)
print("Embedded Sequences:", embedded_sequences)
সারাংশ
- Tokenization: টেক্সটকে ছোট ইউনিটে (শব্দ, চরিত্র বা বাক্য) বিভক্ত করার প্রক্রিয়া।
- Padding: ইনপুট সিকোয়েন্সের দৈর্ঘ্য সমান করা যাতে মডেল এটিকে প্রক্রিয়া করতে পারে।
- Embedding: শব্দগুলিকে একটি ঘন ভেক্টরে রূপান্তর করা যাতে মডেল তাদের মানে বুঝতে পারে। প্রাক-প্রশিক্ষিত এম্বেডিং ব্যবহার করা যেতে পারে বা নতুন এম্বেডিং শিখানো যেতে পারে।
এই সমস্ত পদক্ষেপগুলি NLP মডেলগুলির কার্যকারিতা বাড়াতে সহায়ক, বিশেষ করে যখন আপনি CNN, RNN, বা অন্যান্য মডেল ব্যবহার করছেন।
Read more